package com.flyee.controller.tools.cartoon.control
{
	import com.flyee.controller.tools.cartoon.model.CreateAppearanceModel;
	import com.flyee.controller.tools.cartoon.model.CreateEquipObjModel;
	import com.flyee.controller.tools.cartoon.model.EquipObj;
	import com.flyee.controller.tools.cartoon.model.EquipXMLHelper;
	import com.flyee.controller.tools.cartoon.model.EquipsObj;
	import com.flyee.controller.tools.cartoon.ui.changeequip.WebChangeEquipWindow;
	import com.flyee.utils.load.model.LoaderModel;
	
	import flash.events.Event;
	
	public class CreateEquipObjManager
	{
		private var createArray:Array = new Array();
		private var isOver:Boolean = true;
		
		private var returnFun:Function = null;
		private var badFun:Function = null;
		
		private static var instance:CreateEquipObjManager = null;
		
		private var loadingEquip:EquipObj = null;
		
		private var testModle:CreateEquipObjModel = null;
		
		
		public function CreateEquipObjManager()
		{
			if (instance)
			{
				throw new Error("singleton error!!!");
			}
			instance = this;
		}
		public static function getInstance():CreateEquipObjManager
		{

			if (instance == null)
			{
				instance = new CreateEquipObjManager();
			}
			return instance;
		}
		public function createEquipObj(model:CreateEquipObjModel,returnFun:Function,equipObj:EquipObj = null,badFun:Function=null):void
		{
			var tempObj:Object = {model:model,returnFun:returnFun,badFun:badFun,equip:equipObj};
			createArray.push(tempObj);
			creating();
		}
		public function creating():void
		{
			if(this.isOver)
			{
				if(this.createArray.length > 0)
				{
					this.isOver = false;
					var tempObj:Object = this.createArray.shift();
					var tempEquip:EquipObj = tempObj.equip;
					
					var tempCreateEquipModel:CreateEquipObjModel = tempObj.model;
					this.returnFun = tempObj.returnFun;
					this.badFun = tempObj.badFun;
					
					testModle = tempCreateEquipModel;
					
					var tempModel:CreateAppearanceModel = AppearanceMananger.getInstance().getAppCartoon(tempCreateEquipModel.myID);
					if(tempModel)
					{
						var tempEquipXMLHelper:EquipXMLHelper = tempModel.infoManager.getInfo();
						var tempEquips:EquipsObj = tempEquipXMLHelper.getEquips(tempCreateEquipModel.type,tempCreateEquipModel.dir);
						var tempEquip2:EquipObj = tempEquips.getEquip(tempCreateEquipModel.part);
						
					}
					if(tempEquip2)
					{
						tempEquip2.mySwfURL = tempCreateEquipModel.mySwfURL;
						this.loadingEquip = tempEquip2;
						tempEquip2.addEventListener("createComplete",createHandle);
						tempEquip2.addEventListener("badEquip",badCreateHandle);
						var tempLoader:LoaderModel = AppearanceLoadManager.getInstance().getLoader(tempCreateEquipModel.mySwfURL);
						if(tempLoader)
						{
							getChangeLoader(tempLoader)
						}
						else
						{
							AppearanceLoadManager.getInstance().regist(tempCreateEquipModel.mySwfURL,this.getChangeLoader,tempCreateEquipModel.myID);
						}
					}
					else
					{
						if(tempEquip == null)
						{
							tempEquip = new EquipObj();
						}
						tempEquip.mySwfURL = tempCreateEquipModel.mySwfURL
						this.loadingEquip = tempEquip;
						tempEquip.setData(tempObj.model);
						tempEquip.addEventListener("createComplete",createHandle);
						tempEquip.addEventListener("badEquip",badCreateHandle);
					}
				}
			}
		}
	
		private function getChangeLoader(t:LoaderModel):void
		{
			this.loadingEquip.setMySwfURL(t);
			this.loadingEquip.dispatchEvent(new Event("createComplete"));
		}
		public function createHandle(e:Event):void
		{
			var tempEquip:EquipObj = e.currentTarget as EquipObj;
			if(this.returnFun != null)
			{	
				this.returnFun(tempEquip)
			}
			this.returnFun = null;
			this.badFun = null;
			tempEquip.removeEventListener("createComplete",createHandle);
			tempEquip.removeEventListener("badEquip",badCreateHandle);
			this.loadingEquip = null;
			this.isOver = true;
			this.creating();
		}
		public function badCreateHandle(e:Event):void
		{
			var tempEquip:EquipObj = e.currentTarget as EquipObj;
			tempEquip.clear();
			
			if(this.badFun != null)
			{	
				this.badFun(tempEquip)
			}
			
			this.returnFun = null;
			this.badFun = null;
			this.loadingEquip = null;
			tempEquip.removeEventListener("createComplete",createHandle);
			tempEquip.removeEventListener("badEquip",badCreateHandle);
			this.isOver = true;
			this.creating();
		}
	}
}